/**
 * 该类是用来封装得到查询资金信息接口的查询条件和相关配置项
 */
class ProfileParams {
    constructor(date,describe){
        this.date=date;
        this.describe=describe;
        //最好不要像这样写，这样写完全就使得类没有意义；
        if(date && Object.keys(date).length == 0){
            Reflect.deleteProperty(this,"date");
        };
        if(!describe){
            Reflect.deleteProperty(this,"describe");
        };
    };
    //该类的静态方法与静态属性（静态方法与属性只能通过类来调用，不能用其实例来调用）
    //counts为查询到的数据总量
    static counts=0;
    //该方法为查询数据前的筛选条件
    static profileDataObj(obj){
        //对于按时间筛选的处理逻辑
        let date={};
        if(obj.startTime && obj.endTime){//如果前端两者都传了
            date.$gte=obj.startTime;
            date.$lte=obj.endTime;
        }else if(obj.startTime && !obj.endTime){//如果只传了开始时间
            date.$gte=obj.startTime;
        }else if(!obj.startTime && obj.endTime){//如果只传了结束时间
            date.$lte=obj.endTime;
        };
        return new ProfileParams(date);
    };
    //该方法为查询到数据后的条件
    static profileOptionsObj(obj){
        let findOptionsObj={ //查询到数据后的条件
            skip:0, //查询第几条后的数据
            limit:5, //查几条数据
            // sort:{
            //     date:-1 //按照日期降序排列查询的数据
            // }
            sort:"-date", //也可以此来降序
        };
        Object.keys(obj).forEach((item)=>{//将传来的字符串转为数字类型，防止计算出错
            if(item === "pageNum" || item === "pageSize"){
                obj[item]=Number(obj[item]);
            };
        });
        //对于查询资金信息接口分页的参数处理
        if(obj.pageNum && obj.pageSize){//如果前端两者都传了
            findOptionsObj.skip=(obj.pageNum-1)*obj.pageSize;
            findOptionsObj.limit=obj.pageSize;
        }else if(obj.pageNum && !obj.pageSize){//如果前端只传了当前页
            findOptionsObj.skip=(obj.pageNum-1)*findOptionsObj.limit;
        }else if(!obj.pageNum && obj.pageSize){//如果前端只传了当前页的数量
            findOptionsObj.skip=findOptionsObj.skip*obj.pageSize;
        };
        return findOptionsObj;
    };
};

module.exports=ProfileParams;